package com.resource.manager.search.vo;

import lombok.Data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Data
public class FileTypeInstance implements Serializable {

    private FileTypeInstance() {
    }

    /**
     * 文件类型
     */
    private List<FileType> fileTypes = new ArrayList<>();

    private int allWidth;

    public static FileTypeInstance build(int allWidth) {
        FileTypeInstance fileTypeInstance = new FileTypeInstance();
        List<FileType> types = FileType.buildImageFileType();
        fileTypeInstance.setFileTypes(types);
        fileTypeInstance.setAllWidth(allWidth);
        return fileTypeInstance;
    }

    public List<FileType> getFileTypes(int allWidth) {
        calTypeXY(fileTypes, allWidth);
        this.setAllWidth(allWidth);
        return fileTypes;
    }

    public void setAllWidth(int allWidth) {
        calTypeXY(fileTypes, allWidth);
        this.allWidth = allWidth;
    }

    public void addFileType(FileType fileType) {
        fileType.setIco("img/no.png");
        Integer maxSort = fileTypes.stream().map(FileType::getSort).max(Integer::compareTo).orElse(0);
        fileType.setSort(maxSort + 1);
        fileType.setId(UUID.randomUUID().toString());
        this.fileTypes.add(fileType);
        //计算位置
        calTypeXY(fileTypes, allWidth);
    }

    public void removeFileType(String id) {
        this.fileTypes.removeIf(fileType -> fileType.getId().equals(id));
    }

    public String editFileType(FileType type) {
        if (type.getId() == null) {
            return "缺少ID";
        }
        FileType fileType = this.fileTypes.stream().filter(fileType1 -> fileType1.getId().equals(type.getId())).findFirst().orElse(null);
        if (fileType == null) {
            return "类型已删除!";
        }
        fileType.setName(type.getName());
        fileType.setSuffix(type.getSuffix());
        return null;
    }

    private static void calTypeXY(List<FileType> types, int width) {
        int startX = 10;
        int startY = 10;
        for (FileType type : types) {
            type.setX(startX);
            type.setY(startY);

            startX += type.getWidth() + 10;
            if (startX >= width - (type.getWidth() + 10)) {
                startX = 10;
                startY = startY + type.getHeight() + 10;
            }
        }
    }
}
